﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using Newtonsoft.Json;

namespace AnyExeTo.WindowsService
{
    /// <summary>
    /// 服务选项
    /// </summary>
    public class ServiceOptions
    {
        /// <summary>
        /// 服务选项。
        /// </summary>
        public string ___ServiceOptions => "服务选项。";

        /// <summary>
        /// 指示系统用于标识此服务的名称。
        /// </summary>
        public string ___ServiceName => "指示系统用于标识此服务的名称。";

        /// <summary>
        /// 指示系统用于标识此服务的名称。
        /// </summary>
        public string ServiceName { get; set; }

        /// <summary>
        /// 指示向用户标识服务的友好名称。
        /// </summary>
        public string ___DisplayName => "指示向用户标识服务的友好名称。";

        /// <summary>
        /// 指示向用户标识服务的友好名称。
        /// </summary>
        public string DisplayName { get; set; }

        /// <summary>
        /// 获取或设置服务的说明。
        /// </summary>
        public string ___Description => "获取或设置服务的说明。";

        /// <summary>
        /// 获取或设置服务的说明。
        /// </summary>
        public string Description { get; set; }

        /// <summary>
        /// 指示启动此服务的方式和时间。
        /// </summary>
        public string ___StartType => "指示启动此服务的方式和时间。{Automatic, Manual, Disabled}";

        /// <summary>
        /// 指示启动此服务的方式和时间。
        /// </summary>
        public string StartType { get; set; }

        /// <summary>
        /// 获取或设置运行该服务应用程序时所使用的帐户类型。
        /// </summary>
        public string ___Account => "获取或设置运行该服务应用程序时所使用的帐户类型。{LocalService, NetworkService, LocalSystem}";

        /// <summary>
        /// 获取或设置运行该服务应用程序时所使用的帐户类型。
        /// </summary>
        public string Account { get; set; }

        /// <summary>
        /// 可执行文件名称
        /// </summary>
        public string ___ExeFileName => "可执行文件名称";

        /// <summary>
        /// 可执行文件名称
        /// </summary>
        public string ExeFileName { get; set; }

        /// <summary>
        /// 启动参数
        /// </summary>
        public string ___StartArguments => "启动参数";

        /// <summary>
        /// 启动参数
        /// </summary>
        public string StartArguments { get; set; }

        /// <summary>
        /// 关闭参数
        /// </summary>
        public string ___CloseArguments => "关闭参数";

        /// <summary>
        /// 关闭参数
        /// </summary>
        public string CloseArguments { get; set; }

        /// <summary>
        /// 使用关闭主窗体方法
        /// </summary>
        public string ___UseCloseMainWindow => "使用关闭主窗体方法";

        /// <summary>
        /// 使用关闭主窗体方法
        /// </summary>
        public bool UseCloseMainWindow { get; set; }

        /// <summary>
        /// 从文件读物
        /// </summary>
        public static ServiceOptions LoadFromFile()
        {
            var fileName = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location, ".json");
            if (File.Exists(fileName))
            {
                var content = File.ReadAllText(fileName, Encoding.UTF8);
                try
                {
                    return JsonConvert.DeserializeObject<ServiceOptions>(content);
                }
                catch (Exception)
                {
                    // 忽略
                }
            }

            return new ServiceOptions();
        }

        /// <summary>
        /// 保存到文件
        /// </summary>
        public void SaveToFile()
        {
            var fileName = Path.ChangeExtension(Assembly.GetExecutingAssembly().Location, ".json");
            File.WriteAllText(fileName, JsonConvert.SerializeObject(this, Formatting.Indented), Encoding.UTF8);
        }
    }
}